package com.soft.javase.ch09.set;

import java.util.HashSet;
import java.util.Iterator;

/**
 * @author wangzhisen
 * @Desc TODO
 * @date 2025/5/5
 */
public class PersonHashSetDemo {
    public static void main(String[] args) {
        HashSet<Person> set = new HashSet<>();
        Person p1 = new Person("aaa",18);
        Person p2 = new Person("bbb",21);
        Person p3 = new Person("ccc",19);
        Person p4 = new Person("bbb",20);
        Person p5 = new Person("bbb",21);
        //先比较元素的hashCode(),若相同再比较equals()
        set.add(p1);
        set.add(p2);
        set.add(p3);
        set.add(p4);
        set.add(p5);
        set.add(null);
        //默认使用的是Object类中的equals(),== 比较的是地址  false
        //Person类重写equals()和hashCode()后，比较的是各个属性值 true
        System.out.println(p2.equals(p5));
        System.out.println(set);
        System.out.println(set.size());

        System.out.println("------------------迭代方式一  加强foreach-------------------");
        //加强foreach
        for (Person person : set) {
            System.out.println(person);
        }

        System.out.println("------------------迭代方式二  Iterator迭代器-------------------");
        Iterator<Person> iterator = set.iterator();
        while (iterator.hasNext()) {
            Person person = iterator.next();
            System.out.println(person);
        }

        System.out.println("------------------迭代方式三 Lambda表达式-------------------");
        set.forEach(System.out::println);
    }
}
